#include <bits/stdc++.h>
using namespace std;
void merge_sort(int q[],int l ,int r){
  //思路：1.分割到[1个元素] 然后开始合并  2.合并的时候借助一个temp数组，对前一半后一半数组取小放置（就是排序） O(n) 然后对这层q进行拷贝temp(排好序）)
  if (l>=r) return;
  int mid = (l+r) >>1;
  merge_sort(q,l,mid);
  merge_sort(q,mid+1,r);
  vector<int> temp;
  int i = l,j = mid+1;
  while(i<=mid&&j<=r)
    if (q[i]>=q[j])
      temp.push_back(q[j++]);
    else
      temp.push_back(q[i++]);
    
  while(j<=r) temp.push_back(q[j++]);
  while (i<=mid)
    temp.push_back(q[i++]);
  
  for(int i=l,k = 0;i<=r;i++,k++){
    q[i] = temp[k];
  }
  

}
int main() {
  int n ;cin>>n;
  int *s = new int[n+1];
  for(int i = 0;i<n;i++){
    scanf("%d",&s[i]);
  }
  merge_sort(s,0,n-1);

  for(int i = 0;i<n;i++){
    printf("%d ",s[i]);
  }
  

  return 0;
}